/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package admin.totalizacion;

import DBMS.DataBaseManager;
import clases.Matriz;
import clases.Totalizacion;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

/**
 *
 * @author Gimbet
 */
public class ConsultarTotalizacion extends DispatchAction {

    /*
     * forward name="success" path=""
     */
    private static final String SUCCESS = "success";
    private static final String POPULATE = "populate";
    private static final String FAILURE = "failure";
    private static final String VALUE = "value";

    /**
     * Metodo para cargar el conjunto de anos y trimestres para la totalizacion
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward populate(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        DataBaseManager dbms = DataBaseManager.getInstance();
        Totalizacion t = (Totalizacion) form;
        if (t.getIdMatriz() == null) {
            t.setMensaje("Error extrayendo la matriz de la totalizacion");
            System.out.println("Error extrayendo la matriz de la totalizacion");
            request.setAttribute("Totalizacion", t);
            return mapping.findForward(FAILURE);
        }
        Totalizacion totalizacion = dbms.consultarTotalizacion(t);
        if (totalizacion.getMatriz() != null) {
            System.out.println("La matriz existe en la totalizacion "+totalizacion.getMatriz().getNombre());
            request.setAttribute("Totalizacion", totalizacion);
            request.setAttribute("anos", DataBaseManager.getFechas());
            return mapping.findForward(VALUE);
        }
        t.setMensaje("Error consultando totalizacion");
        request.setAttribute("Totalizacion",t);
        return mapping.findForward(FAILURE);

    }

    /**
     * Metodo para obtener los valores de un ano, trimestre y tipo de matriz en
     * particular
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward search(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        DataBaseManager dbms = DataBaseManager.getInstance();
        Totalizacion t = (Totalizacion) form;
        System.out.println("En search:  "+t.getTipoMatriz()+" "+t.getMatriz().getAno()+" idmatriz "+ t.getIdMatriz());
        String ano = t.getMatriz().getAno();
        String trimestre = t.getMatriz().getTrimestre();
        Totalizacion tot = dbms.consultarTotalizacion(t);
        Matriz matriz = tot.getMatriz();
        matriz.setAno(ano);
        matriz.setTrimestre(trimestre);
        request.setAttribute("anos",DataBaseManager.getFechas());
        if (tot == null){
            t.setMensaje("No se pudo consultar la totalizacion");
            request.setAttribute("Totalizacion",t);
             return mapping.findForward(VALUE);
        }
        
        tot = dbms.obtenerCeldasTotalizacion(tot, t.getTipoMatriz(), t.getMatriz().getAno(), t.getMatriz().getTrimestre());

        if (tot != null) {
           
            System.out.println("Valores obtenidos satisfactoriamente");
            if (!tot.getCeldasATotalizar().isEmpty()) {
                double totalActual = tot.totalizar();
                System.out.println("Totalizar realizado");
                request.setAttribute("Total", totalActual);
                tot.setMensajeOK("Totalizacion calculada");
                 request.setAttribute("Totalizacion", tot);
                return mapping.findForward(VALUE);
            } else {
                System.out.println("Celdas vacias");
                tot.setMensaje("Totalizacion no calculada");
                request.setAttribute("Totalizacion", tot);
                return mapping.findForward(VALUE);
            }
        } else {
            System.out.println("Metodo OBtenerCeldasTotalizacion falla");
            t.setMensaje("Error: No se pudo obtener los valores");
            request.setAttribute("Totalizacion", t);
              return mapping.findForward(VALUE);
        }

    }

}
